home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / string / RCS / stringArray.c,v < prev    next >
Text File  |  1991-10-04  |  3KB  |  127 lines

  1. head     1.1;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.1
  10. date     91.10.03.22.53.53;  author kupfer;  state Exp;
  11. branches ;
  12. next     ;
  13.  
  14.  
  15. desc
  16. @Functions to copy and destroy argv-type arrays of strings.
  17. @
  18.  
  19.  
  20.  
  21. 1.1
  22. log
  23. @Initial revision
  24. @
  25. text
  26. @/* 
  27.  * stringArray.c --
  28.  *
  29.  *    Library functions that create and destroy null-terminated 
  30.  *    arrays of strings.  These routines are compatible with argv, 
  31.  *    host aliases, and other system string arrays.
  32.  *
  33.  * Copyright 1991 Regents of the University of California
  34.  * Permission to use, copy, modify, and distribute this
  35.  * software and its documentation for any purpose and without
  36.  * fee is hereby granted, provided that this copyright
  37.  * notice appears in all copies.  The University of California
  38.  * makes no representations about the suitability of this
  39.  * software for any purpose.  It is provided "as is" without
  40.  * express or implied warranty.
  41.  */
  42.  
  43. #ifndef lint
  44. static char rcsid[] = "$Header: /sprite/lib/forms/RCS/proto.c,v 1.5 91/02/09 13:24:44 ouster Exp $ SPRITE (Berkeley)";
  45. #endif /* not lint */
  46.  
  47. #include <stddef.h>
  48. #include <stdlib.h>
  49. #include <string.h>
  50. #include <spriteString.h>
  51.  
  52.  
  53. /*
  54.  *----------------------------------------------------------------------
  55.  *
  56.  * String_SaveArray --
  57.  *
  58.  *    Save copies of an array of strings.
  59.  *
  60.  * Results:
  61.  *    Returns a pointer to a null-terminated array of string 
  62.  *    pointers.  The array and the strings themselves are new 
  63.  *    storage, a copy of the given string array.
  64.  *
  65.  * Side effects:
  66.  *    None.
  67.  *
  68.  *----------------------------------------------------------------------
  69.  */
  70.  
  71. char **
  72. String_SaveArray(origPtr)
  73.     char **origPtr;        /* string array to copy */
  74. {
  75.     int numStrings;        /* number of strings in the array */
  76.     int string;            /* index into the array */
  77.     char **newPtr;        /* the result */
  78.  
  79.     /* 
  80.      * Count the strings in the array.
  81.      */
  82.     for (numStrings = 0; origPtr[numStrings] != NULL; numStrings++) {
  83.     ;
  84.     }
  85.  
  86.     newPtr = (char **)calloc(numStrings+1, sizeof(char *));
  87.     for (string = 0; string < numStrings; string++) {
  88.     newPtr[string] = strdup(origPtr[string]);
  89.     }
  90.     newPtr[numStrings] = NULL;
  91.  
  92.     return newPtr;
  93. }
  94.  
  95.  
  96. /*
  97.  *----------------------------------------------------------------------
  98.  *
  99.  * String_FreeArray --
  100.  *
  101.  *    Free all the storage for a string array.
  102.  *
  103.  * Results:
  104.  *    Returns a nil pointer so that the caller can easily nil out 
  105.  *    the pointer it passed in.
  106.  *
  107.  * Side effects:
  108.  *    The storage is freed.
  109.  *
  110.  *----------------------------------------------------------------------
  111.  */
  112.  
  113. char **
  114. String_FreeArray(stringsPtr)
  115.     char **stringsPtr;        /* string array to free */
  116. {
  117.     int whichString;        /* index into strings array */
  118.  
  119.     for (whichString = 0; stringsPtr[whichString] != NULL; whichString++) {
  120.     free(stringsPtr[whichString]);
  121.     }
  122.     free(stringsPtr);
  123.  
  124.     return NULL;
  125. }
  126. @
  127.